﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Gruppe1OOPEksamen {

    class Elovn : Vare, IEnergi, ISmileyKontrol {
        // instans variabler
        private double _energiForbrug;
        private double _volumen;
        private double _højde;
        private double _længde;
        private double _bredde;

        // Properties
        public double Højde {
            get {
                return _højde;
            }
            set {
                //Hvis der bliver tildelt en negativ værdi, bliver der smidt en exception
                if (value < 0)
                    throw new ArgumentOutOfRangeException("Du kan ikke tildele en negativ værdi her");
                else
                    _højde = value;
            }
        }
        public double Bredde {
            get {
                return _bredde;
            }
            set {
                if (value < 0)
                    throw new ArgumentOutOfRangeException("Du kan ikke tildele en negativ værdi her");
                else
                    _bredde = value;
            }
        }
        public double Længde {
            get {
                return _længde;
            }
            set {
                if (value < 0)
                    throw new ArgumentOutOfRangeException("Du kan ikke tildele en negativ værdi her");
                else
                    _længde = value;
            }
        }
        public double EnergiForbrug {
            get {
                return _energiForbrug;
            }
            set {
                _energiForbrug = value;
                EnergiKontrol();
            }
        }
        public char EnergiMærke { get; set; }

        public double Volumen { 
            get {
                return _volumen;
            } 
            set {
                // Der checkes om volumen er mindre end dimensionerne ganget sammen og er større end nul
                if (value < (Længde * Bredde * Højde) && value > 0) _volumen = value; 
                else throw new ArgumentOutOfRangeException("Volumen kan ikke være mere end længde*bredde*højde, eller mindre end nul");
            }
        }
        public string Smiley { get; set; }

        #region constructors
        public Elovn(double højdeind, double længdeInd, double breddeInd, double volumenInd, double energiForbrugInd, string navnInd, double prisInd) 
               : base(navnInd, prisInd){
            Højde = højdeind;
            Længde = længdeInd;
            Bredde = breddeInd;
            Volumen = volumenInd;
            EnergiForbrug = energiForbrugInd;
        }
        #endregion

        public virtual void SmileyKontrol(){   }

        public void EnergiKontrol() { // Energimærket beregnes
            double E = 0.6;

            if (Rækkevidde.ErIndenfor<double>(_volumen, 64, 35)) E += 0.2;
            else if (Rækkevidde.StørreEnd<double>(_volumen, 65)) E += 0.4;

            if (Rækkevidde.MindreEnd<double>(EnergiForbrug, E)) EnergiMærke = 'A';
            else if (Rækkevidde.MindreEnd<double>(EnergiForbrug, E + 0.2)) EnergiMærke = 'B';
            else if (Rækkevidde.MindreEnd<double>(EnergiForbrug, E + 0.4)) EnergiMærke = 'C';
            else if (Rækkevidde.MindreEnd<double>(EnergiForbrug, E + 0.6)) EnergiMærke = 'D';
            else if (Rækkevidde.MindreEnd<double>(EnergiForbrug, E + 0.8)) EnergiMærke = 'E';
            else if (Rækkevidde.MindreEnd<double>(EnergiForbrug, E + 1)) EnergiMærke = 'F';
            else EnergiMærke = 'G';

        }

        public override string ToString() {
            string toReturn = "";

            toReturn += base.ToString();
            //tilføj længde
            toReturn += "\nLængde: " + Længde + " cm.";
            //tilføj højde 
            toReturn += "\nHøjde: " + Højde + " cm.";
            //tilføj bredde
            toReturn += "\nBredde: " + Bredde + " cm.";
            //tilføj EnergiForbrug
            toReturn += "\nEnergi forbrug: " + EnergiForbrug + " kWh.";
            //tilføj EnergiMærke
            toReturn += "\nEnergi mærke: " + EnergiMærke;
            //tilføj volumen
            toReturn += "\nVolumen: " + Volumen + " liter";

            return toReturn;
        }
    }
}
